import { domain } from "../config";

//统一的网络请求方法
export function request(params, isGetTonken) {
    // 全局变量
    var globalData = getApp().globalData;
    // 如果正在进行登陆，就将非登陆请求放在队列中等待登陆完毕后进行调用
    if (!isGetTonken && globalData.isLanding) {
        globalData.requestQueue.push(params);
        return;
    }
    uni.request({
        url: domain + params.url, //接口请求地址
        data: params.data,
        header: {
            // 'content-type': params.method == "GET" ? 'application/x-www-form-urlencoded' : 'application/json;charset=utf-8',
            'Authorization': params.login ? undefined : uni.getStorageSync('token')
        },
        method: params.method == undefined ? "POST" : params.method,
        dataType: 'json',
        responseType: params.responseType == undefined ? 'text' : params.responseType,
        success: function (res) {
            if (res.statusCode == 200) {
                //如果有定义了params.callBack，则调用 params.callBack(res.data)
                if (params.callBack) {
                    params.callBack(res.data);
                }

            } else if (res.statusCode == 500) {
                uni.showToast({
                    title: "服务器出了点小差",
                    icon: "none"
                });
            } else if (res.statusCode == 401) {
                // 添加到请求队列
                globalData.requestQueue.push(params);
                console.log('+++---++++服务端还有错误')
                //是否正在登陆
                if (!globalData.isLanding) {
                    globalData.isLanding = true
                    //重新获取token,再次请求接口
                    getToken();
                }
            } else if (res.statusCode == 400) {
                uni.showToast({
                    title: res.data,
                    icon: "none"
                })

            } else {
                //如果有定义了params.errCallBack，则调用 params.errCallBack(res.data)
                if (params.errCallBack) {
                    params.errCallBack(res);
                }
            }
            if (!globalData.isLanding) {
                uni.hideLoading();
            }
        },
        fail: function (err) {
            uni.hideLoading();
            uni.showToast({
                title: "服务器出了点小差",
                icon: "none"
            });
        }
    })
}

//通过code获取token,并保存到缓存
export const getToken = function () {
    uni.login({
        success: res => {
            console.log(res);
            // 发送 res.code 到后台换取 openId, sessionKey, unionId
            request({
                login: true,
                url: '/login?grant_type=mini_app',
                data: {
                    principal: res.code
                },
                callBack: result => {

                    // 没有获取到用户昵称，说明服务器没有保存用户的昵称，也就是用户授权的信息并没有传到服务器
                    if (!result.nickName) {
                        updateUserInfo();
                    }
                    if (result.userStutas == 0) {
                        uni.showModal({
                            showCancel: false,
                            title: '提示',
                            content: '您已被禁用，不能购买，请联系客服'
                        })
                        uni.setStorageSync('token', '');
                    } else {
                        uni.setStorageSync('singletoken', result.access_token)
                        uni.setStorageSync('token', 'bearer' + result.access_token); //把token存入缓存，请求接口数据时要用
                    }
                    var globalData = getApp().globalData;
                    globalData.isLanding = false;
                    while (globalData.requestQueue.length) {
                        request(globalData.requestQueue.pop());
                    }
                }
            }, true)

        },
        fail: err => {
            console.log('登录失败', err)
        }
    })
}

// 更新用户头像昵称
export function updateUserInfo() {
    wx.getUserInfo({
        success: (res) => {
            var userInfo = JSON.parse(res.rawData)
            request({
                url: "/p/user/setUserInfo",
                method: "PUT",
                data: {
                    avatarUrl: userInfo.avatarUrl,
                    nickName: userInfo.nickName
                }
            });
        }
    })
}

//获取购物车商品数量
export function getCartCount() {
    var params = {
        url: "/p/shopCart/prodCount",
        method: "GET",
        data: {},
        callBack: function (res) {
            console.log(res, "购物车数量")
            if (res > 0) {
                uni.setTabBarBadge({
                    index: 3,
                    text: res + "",
                })
                var app = getApp();
                app.globalData.totalCartCount = res;
            } else {
                uni.removeTabBarBadge({
                    index: 2
                })
                var app = getApp();
                app.globalData.totalCartCount = 0;
            }
        }
    };
    request(params);
}
